const {
  InsureSort
} = require('../models/insureSortModel');
const {
  InsureProduct
} = require('../models/insureProductModel'); //保险产品模块

/*
 * @Author: 岸舟
 * @Date: 2020-09-19 10:58:33
 * @LastEditors: MiNine
 * @LastEditTime: 2020-09-29 15:16:28
 * @Description: 新增保险产品分类的方法（新增时分类名不可重复）
 * @pramas:sortName  分类名：String
 */

async function addSort(req, res) {
  try {
    const {
      sortName, //分类名：String
    } = req.body

    // 分类名不能为空或者包含空格
    if (!sortName.includes(" ") && sortName) {
      //分类名不能重复
      const list = await InsureSort.find({
        sortName
      })
      if (list.length == 0) {
        await InsureSort.create({
          sortName
        })
        res.send({
          status: 1,
          type: "新增成功"
        })
      } else {
        res.send({
          status: 0,
          type: "新增失败",
          msg: "分类名重复"
        })
      }
    } else {
      res.send({
        status: 0,
        type: "新增失败",
        msg: "分类名不能为空或者包含空格"
      })
    }
  } catch (err) {
    console.log(err);
    res.send({
      status: 0,
      type: "新增失败",
      msg: err
    })
  }
}

async function delSort(req, res) {
  try {
    const {
      sortName, //分类名：String
    } = req.body

    const list = await InsureSort.find({
      sortName
    })
    if (list.length == 0) {
      res.send({
        status: 0,
        type: "删除失败",
        msg: "此分类不存在"
      })
    } else {
      //当前分类下无保险产品时才可删除
      if (list[0].includeProductList.length == 0) {
        await InsureSort.deleteOne({
          sortName
        })
        res.send({
          status: 1,
          type: "删除成功",
        })
      } else {
        res.send({
          status: 0,
          type: "删除失败",
          msg: "此分类下存在保险产品"
        })
      }
    }
  } catch (err) {
    console.log(err);
    res.send({
      status: 0,
      type: "删除失败",
      msg: err
    })
  }
}

/*
 * @Author: 岸舟
 * @Date: 2020-09-19 10:58:33
 * @LastEditors: 岸舟
 * @LastEditTime: 2020-09-19 14:16:42
 * @Description: 修改保险产品分类的方法（修改时分类名不可重复）
 * @pramas: _id :分类_id
 *          sortName  分类名：String
 */


async function modSort(req, res) {
  try {
    const {
      _id, //分类_id
      sortName, //分类名：String
    } = req.body

    const list = await InsureSort.find({
      _id
    })
    if (list.length == 0) {
      res.send({
        status: 0,
        type: "修改失败",
        msg: "此分类不存在"
      })
    } else {
      //分类名不能重复
      const list = await InsureSort.find({
        sortName
      })
      if (list.length == 0) {
        await InsureSort.updateOne({
          _id
        }, {
          sortName
        })
        res.send({
          status: 1,
          type: "修改成功",
        })
      } else {
        res.send({
          status: 0,
          type: "修改失败",
          msg: "分类名重复"
        })
      }
    }
  } catch (err) {
    console.log(err);
    res.send({
      status: 0,
      type: "修改失败",
      msg: err
    })
  }
}


/*
 * @Author: 岸舟
 * @Date: 2020-09-19 10:58:33
 * @LastEditors: 岸舟
 * @LastEditTime: 2020-09-19 14:16:42
 * @Description: 获取所有保险产品分类的方法
 */


async function getSorts(req, res) {
  try {
    const data = await InsureSort.find().populate("includeProductList")
    res.send({
      status: 1,
      type: "获取成功",
      data //Array 所有保险分类的集合
    })
  } catch (err) {
    console.log(err);
    res.send({
      status: 0,
      type: "获取失败",
      msg: err
    })
  }
}


/**
 * @name: 根据分类下的集合,去调整集合中个体身上绑定的集合id
 * @param {type} 
 * @return {type} 
 */
async function initSorts() {
  const data = await InsureSort.find();
  data.forEach(async item => {
    if (item.includeProductList instanceof Array) {
      console.log(item.includeProductList);
      await item.includeProductList.forEach(async _id => {
        console.log(_id + "更新ing...");
        await InsureProduct.updateOne({
          _id
        }, {
          belongInsureSortId: item._id
        })
      })
    }
  });
}
module.exports = {
  addSort,
  delSort,
  modSort,
  getSorts,
  initSorts
}